//自定义错误页面异常处理
package com.wzy.wzyblog.handler;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;


//可以拦截所有标注controller注解的控制器（全局异常处理，全局数据绑定，全局请求数据预处理）
@ControllerAdvice
public class ControllerExceptionHandler {
//获取日志对象
    private final Logger logger= LoggerFactory.getLogger(this.getClass());

//    标识异常处理         拦截exception类异常
    @ExceptionHandler(Exception.class)
//    返回一个页面和后台输出前端的信息              可以获取错我路径url         返回异常参数
    public ModelAndView exceptionHandle(HttpServletRequest request,Exception e) throws Exception {
//                    记录异常的url     和信息              传递值到{}中（相当于站位）
        logger.error("Requst URL: {},Exception :{}",request.getRequestURI(),e);

//                                              类型           状态             状态不为空则抛出异常信息
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }

//返回一个错误页面new ModelAndView
        ModelAndView mv=new ModelAndView();
//        获取异常信息
        mv.addObject("url",request.getRequestURI());
        mv.addObject("exception",e);
//        返回到那个页面？ error下的error
        mv.setViewName("error/error");
//        返回过去
        return mv;

    }
}
